package com.blacktech.dbu.meta.repository;

import com.blacktech.dbu.meta.entity.DbuColumn;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 数据表字段信息
 * Note: 基础CRUD操作通过ColumnController提供，复杂业务逻辑在此Repository中实现
 *
 * @author yanyunsong
 */
@Repository
public interface ColumnRepository extends JpaRepository<DbuColumn, Long>, JpaSpecificationExecutor<DbuColumn> {

    /**
     * 根据表ID查找所有字段
     * @param tableId 表ID
     * @return 字段列表
     */
    List<DbuColumn> findByTableId(Long tableId);

    
    /**
     * 根据表ID和字段名查找字段
     * @param tableId 表ID
     * @param columnName 字段名
     * @return 字段
     */
    DbuColumn findByTableIdAndColumnName(Long tableId, String columnName);

    /**
     * 检查表中是否存在指定字段名
     * @param tableId 表ID
     * @param columnName 字段名
     * @return 是否存在
     */
    boolean existsByTableIdAndColumnName(Long tableId, String columnName);

    /**
     * 根据字段库ID查找所有字段
     * @param fieldLibraryId 字段库ID
     * @return 字段列表
     */
    List<DbuColumn> findByFieldLibraryId(Long fieldLibraryId);

    /**
     * 根据字段库ID和表ID查找字段
     * @param fieldLibraryId 字段库ID
     * @param tableId 表ID
     * @return 字段列表
     */
    List<DbuColumn> findByFieldLibraryIdAndTableId(Long fieldLibraryId, Long tableId);

    /**
     * 查找所有从字段库创建的字段
     * @return 字段列表
     */
    List<DbuColumn> findByFromFieldLibraryTrue();

    /**
     * 根据字段库ID统计使用次数
     * @param fieldLibraryId 字段库ID
     * @return 使用次数
     */
    long countByFieldLibraryId(Long fieldLibraryId);

    /**
     * 根据表ID删除所有字段
     * @param tableId 表ID
     */
    void deleteByTableId(Long tableId);

    /**
     * 根据表ID查找所有字段（按字段排序序号排序）
     * @param tableId 表ID
     * @return 字段列表
     */
    List<DbuColumn> findByTableIdOrderBySortOrder(Long tableId);
}